package DAO;

import Controleur.AccueilListener;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class GestionnaireXML {

    Connection connexion;

    /**
     * connexion � la base de donn�e.
     *
     * @param fichierConfig
     */
    public void connexion() {
        String url = "jdbc:mysql://db4free.net:3306/isigame";
        String user = "isigame";
        String pass = "isigame";
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("No driver");
        }
        try {
            connexion = DriverManager.getConnection(url, user, pass);
        } catch (Exception e) {
            System.out.println("pas de connexion");
        }
    }

    /**
     * deconnexion a la base de donn�es
     */
    public void deconnexion() throws Exception {
        if (connexion != null) {
            connexion.close();
        }
    }

    /**
     * sauvegarde le fichier dans le dossier s'il n'y est pas encore.
     *
     * @param f
     * @param type
     */
    public void savegardeFichier(File f, String type) {
        File file = new File("./src/DAO/" + type + "/" + f.getName());
        try {
            Scanner sc = new Scanner(f);
            FileWriter fw = new FileWriter(file);
            while (sc.hasNext()) {
                fw.write(sc.nextLine());
            }
            fw.close();
        } catch (IOException e) {
            System.out.println("non creer");
        }
    }

    /**
     *
     * @param nombreQuestion
     * @param type
     */
    public String[] getFiles(int nombreQuestion, String type) throws IOException {
        
        File di = new File("./src/DAO/" + type + "/");

        File fl[] = di.listFiles();
        List<File> f2 = Arrays.asList(fl);
        String questionnaire[] = new String[10];
        Stack<Integer> pile = new Stack();
        
        
              
        
        
        for (int i = 0; i < nombreQuestion - 1; i++) {
            int hasard = (int) (Math.random() * f2.size());
            if (!pile.contains(hasard)) {
                pile.add(hasard);


                Decryptage d = new Decryptage();
        
      
                Path path = Paths.get(f2.get(hasard).getPath());
                
                    byte[] data = Files.readAllBytes(path);
                    String tmp = d.decryptInString(data);
            
                    questionnaire[i] = tmp;
                    


            } else {
                i--;
            }
      
        }
        return questionnaire;
    }

    /**
     * verifie si de nouvelles questions ont été postéess.
     */
    public boolean verifMAJ(String table) {
        
        System.out.println("sa passe");
        boolean reponse = false;
        if(connexion != null){
        try {
            PreparedStatement ps;
            ps = connexion.prepareStatement("SELECT FICHIER FROM " + table + " LIMIT " + linecount("./src/DAO/" + table) + ",20000");

            //recuperation du fichier
            ResultSet rs = ps.executeQuery();


            while (rs.next()) { //Pour chaque fichier recuperes
                reponse = true;
                //Lecture du longblob et ecriture sur le disque
                Blob blob = rs.getBlob("FICHIER");

                //Nomme et repertorie le fichier en fonction de son type et du nombre de questions contenu dans le dossier
                File blobFile = new File("./src/DAO/" + table + "/" + table + (linecount("./src/DAO/" + table + "/") + 1) + ".xml");
                FileOutputStream outStream = new FileOutputStream(blobFile);
                InputStream inStream = blob.getBinaryStream();

                int length = -1;
                byte[] buffer = new byte[4096];

                //On recopie le contenu du Blob
                while ((length = inStream.read(buffer)) != -1) {
                    outStream.write(buffer, 0, length);
                    outStream.flush();
                }

                inStream.close();
                outStream.close();
            }
        } catch (Exception e) {
            System.out.println("non");
        }
        }
        return reponse;
    }

    /**
     * compte le nombre de fichier dans un dossier donné
     *
     * @param chemin
     * @return
     * @throws Exception
     */
    public int linecount(String chemin) throws Exception {
        File di = new File(chemin);
        File fl[] = di.listFiles();
        return fl.length;
    }
}